Programmable logic devices (PLDs) are a well-known type of integrated circuit that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), and so forth.
Each programmable tile typically includes both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable logic are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
The programming used to configure an FPGA or other PLD is often very complex. It is common to use a modeling system to simulate the operation of the programming to evaluate how a physical FPGA will operate when used in a system, such as a system on a chip (“SoC”). In some systems, a PLD interfaces with or includes functional blocks. For example, an FPGA includes an embedded processor operating at a first clock speed, and an I/O interfacing peripheral and a customized computation peripheral (such as a digital processing or image processing filter) operating at a different clock speed. Multiple simulators are integrated into the modeling system to simulate the different functional blocks. In yet other instances, the PLD devices themselves are used in the simulation as emulators. In this case, a portion of a design physically runs on a PLB device while the rest of the design is simulated by the simulators running on a host PC. A modeling system interface controls the simulation progress of the software simulators or emulation hardware, and exchanges simulation data between them when needed.
System level design requires the ability to quickly connect and adapt compatible components (blocks) together. Connections between components are typically made thorough ports of the components. Conventional design approaches are often highly iterative, since one type of port might not be compatible with the type of port on the corresponding component. IC systems are typically defined as descriptions of components and ports, wherein data flows and control interactions between the components are described in sufficient detail to accurately model IC system performance in an IC simulator (e.g., a dedicated IC design and simulation tool (i.e., a limited-use type of computer) or a general purpose computer configured to run IC simulation software and output simulated IC results).
CLICK is a dataflow language that treats software-based design elements in a software system as a specialized network and uses modular description language familiar in the field of networked systems. The concise yet highly detailed syntax requirements of CLICK makes its commands very powerful for handling packet data flow. However, an IC system has many types of ports (as could some software systems). An IC system designer needs high familiarity with components to specify the names of ports and match their types against that of other ports when forming connections. While CLICK is a valuable tool for designing complex systems, additional functionality in a system design environment for designing IC systems and software systems having multiple port types is desirable.